//-------------------------------------------------------------------------
/**
   File:   RegistryTypes.h

   Descr.: - todo -

   Author: Stefan Leihkauf
   Date:   8/8/2011
*/
//-------------------------------------------------------------------------
#ifndef _REGISTRYTYPES_H
#define _REGISTRYTYPES_H
#include "common/types/typedef.h"
#include "handle/win_handles.h"
#include "registry/detail/root_key_handle.h"

//-------------------------------------------------------------------------
/* public typedefinition of a predefined rootkey handle */
typedef registry_detail::root_key_handle RootKeyHandle;

//-------------------------------------------------------------------------
/* predefined root registry handles */
static const RootKeyHandle HClassesRoot(HKEY_CLASSES_ROOT		 					 , _T("ClassesRoot"));
static const RootKeyHandle HCurrentConfig(HKEY_CURRENT_CONFIG	 					 , _T("CurrentConfig"));
static const RootKeyHandle HCurrentUser(HKEY_CURRENT_USER		 					 , _T("CurrentUser"));
static const RootKeyHandle HCurrentUserLocalSettings(HKEY_CURRENT_USER_LOCAL_SETTINGS, _T("CurrentUserLocalSettings"));
static const RootKeyHandle HLocalMachine(HKEY_LOCAL_MACHINE		 					 , _T("LocalMachine"));
static const RootKeyHandle HPerformanceData(HKEY_PERFORMANCE_DATA					 , _T("PerformanceData"));
static const RootKeyHandle HPerformanceNLSText(HKEY_PERFORMANCE_NLSTEXT				 , _T("PerformanceNLSText"));
static const RootKeyHandle HPerformanceText(HKEY_PERFORMANCE_TEXT					 , _T("PerformanceText"));
static const RootKeyHandle HUsers(HKEY_USERS					 					 , _T("Users"));

#ifdef __INTEL_COMPILER
#	pragma warning (disable : 1119) // extra braces are nonstandard but needed by boost::array
#endif

//-------------------------------------------------------------------------
/* a list of the predefined rootkey handles for enumeration support */
static const boost::array<const RootKeyHandle*, 9> RootKeyHandles = {
	{{	&HClassesRoot				},
	{	&HCurrentConfig				},
	{	&HCurrentUser				},
	{	&HCurrentUserLocalSettings	},
	{	&HLocalMachine				},
	{	&HPerformanceData			},
	{	&HPerformanceNLSText		},
	{	&HPerformanceText			},
	{	&HUsers						}}
};

#endif //!defined _REGISTRYTYPES_H
